package com.hello.sandbox.view.pager2banner;

import android.view.View;
import androidx.viewpager2.widget.ViewPager2;

public class ScaleInTransformer implements ViewPager2.PageTransformer {

  private static final float DEFAULT_CENTER = 0.5f;
  private float mMinScale = 0.85f;

  public ScaleInTransformer() {}

  public ScaleInTransformer(float minScale) {
    mMinScale = minScale;
  }

  @Override
  public void transformPage(View view, float position) {
    int pageWidth = view.getWidth();
    int pageHeight = view.getHeight();
    view.setPivotY(pageHeight >> 1);
    view.setPivotX(pageWidth >> 1);
    if (position < -1) { // [-Infinity,-1)
      // This page is way off-screen to the left.
      view.setScaleX(mMinScale);
      view.setScaleY(mMinScale);
      view.setPivotX(pageWidth);
    } else if (position <= 1) {
      // [-1,1]
      // Modify the default slide transition to shrink the page as well
      if (position < 0) {
        // 1-2:1[0,-1] ;2-1:1[-1,0]
        float scaleFactor = (1 + position) * (1 - mMinScale) + mMinScale;
        view.setScaleX(scaleFactor);
        view.setScaleY(scaleFactor);
        view.setPivotX(pageWidth * (DEFAULT_CENTER + (DEFAULT_CENTER * -position)));
      } else {
        // 1-2:2[1,0] ;2-1:2[0,1]
        float scaleFactor = (1 - position) * (1 - mMinScale) + mMinScale;
        view.setScaleX(scaleFactor);
        view.setScaleY(scaleFactor);
        view.setPivotX(pageWidth * ((1 - position) * DEFAULT_CENTER));
      }
    } else {
      // (1,+Infinity]
      view.setPivotX(0);
      view.setScaleX(mMinScale);
      view.setScaleY(mMinScale);
    }
  }
}
